A.Sea Battle (签到)
题意
给你一个上下两个矩形,让他们左边对着拼起来,求出他们外面一圈的面积
思路
关键就是中间那一块留面积大的就行
1 |
|
B.Draw! (模拟)
题意
按顺序给你一堆比分,问你最多能出现几场胜场
思路
也是直接模拟,不过要注意平局的时候
1 |
|
C.Birthday (模拟)
题意
给你一堆高度,让你重新排成一个圆使得对于任意一个高度她周围的差尽可能小
思路
对于一个数,那么她周围的肯定是和他最近的数,所以直接排序一下,拿一个双端队列前后模拟一下就行
1 |
|
D.Gourmet choice (并查集缩点+拓扑排序)
题意
有N+M个数 给出他们之间两两的比较,让你构造出一组数据满足这个比较
思路
首先考虑’=’如果有=的话说明他们的值是一样的 所以可以把他们缩成一个点,可以减少计算量
然后对于‘>’和”<”其实我们都可以转化成’>’ 对于一个>我们可以变成一个图,表示>右边的那个数比左边的小,连小一条线,说明左边的要等右边的数字都分配完再分配
1 |
|
E.String Multiplication(DP)
题意
定义一种字符串乘法 如果aab*c变成cacacbc
就是用后一个字符串填满前一个字符串的空隙和前后
问你n个乘法过后的结果字符串的最长连续相同字母是多少
思路
可以发现答案又最后一种字符串控制,因为就算前面的答案是多少都会被最后一个字符串拆开
所以分析最后一个字符串,发现情况有三种
如果最后一个字符串字符只有一种,那么答案就为这个前面那个字符串的这个字符长度+1 并且乘上最后一个字符串的长度 + 前面那个字符串的长度
如果是 不是的话那么答案就只和最后字符串的前后字符有关系,答案就是当前字符串的前后最长长度+(前面的答案是否有包含这个字符) 如果前后的字符都一样的话那么答案又不同了
1 |
|
F.Asya And Kittens (启发式合并 or ripe黑科技 or 链表操作)
题意
给你n-1对,相邻的在一块,选了这两个数,这两个集合就可以看成一个集合了,问符合条件的序列。
思路
很容易想到并查集的合并操作,对于一次合并相当于把两个集合变成了一块,那么现在的问题就是怎么处理集合合并
方法有三,
1.启发式合并,每次把容量小的合并到容量大的里面去,这样可以保证复杂度是log
2.链表,这样直接把头指针插到另一个的尾指针上,每一个的操作复杂度为o(1)
3.rope 黑科技,
1 |
|
rope
1 |
|